/**
 * 路由辅助工具
 * 用于处理动态路由的生成和管理
 */

/**
 * 图标映射表 - 将后端返回的图标名称映射到实际图标
 */
const iconMap = {
    'article': '📝',
    'me': '👤',
    'user': '👥',
    'article-admin': '📝',
    'user-admin': '👥',
    'setting': '⚙️',
    'profile': '👤',
    'my-articles': '📄',
    'article-management': '📝',
    'user-management': '👥'
}

/**
 * 组件映射表 - 将后端返回的组件名称映射到实际组件
 */
const componentMap = {
    'MyArticles': () =>
        import ('../views/MyArticles.vue'),
    'Profile': () =>
        import ('../views/Profile.vue'),
    'ArticleManagement': () =>
        import ('../views/ArticleManagement.vue'),
    'UserManagement': () =>
        import ('../views/UserManagement.vue')
}

/**
 * 转换后端菜单数据为前端路由配置
 * @param {Array} menus - 后端返回的菜单数据
 * @returns {Array} 前端路由配置数组
 */
export function transformMenusToRoutes(menus) {
    if (!menus || !Array.isArray(menus)) {
        return []
    }

    return menus.map(menu => {
        const route = {
            path: menu.path,
            name: menu.menuCode,
            component: componentMap[menu.component],
            meta: {
                title: menu.menuName,
                icon: iconMap[menu.icon] || menu.icon,
                menuId: menu.id,
                permissionCode: menu.permissionCode,
                requiresAuth: true,
                sortOrder: menu.sortOrder
            }
        }

        // 递归处理子菜单
        if (menu.children && menu.children.length > 0) {
            route.children = transformMenusToRoutes(menu.children)
        }

        return route
    })
}

/**
 * 检查用户是否有访问某个路由的权限
 * @param {String} permissionCode - 权限码
 * @param {Array} permissions - 用户权限列表
 * @returns {Boolean}
 */
export function hasPermission(permissionCode, permissions) {
    if (!permissionCode) {
        return true // 没有权限要求的路由默认可访问
    }
    return permissions && permissions.includes(permissionCode)
}

/**
 * 根据权限过滤路由
 * @param {Array} routes - 所有路由
 * @param {Array} permissions - 用户权限列表
 * @returns {Array}
 */
export function filterRoutesByPermissions(routes, permissions) {
    return routes.filter(route => {
        if (route.meta && route.meta.permissionCode) {
            if (!hasPermission(route.meta.permissionCode, permissions)) {
                return false
            }
        }
        if (route.children) {
            route.children = filterRoutesByPermissions(route.children, permissions)
        }
        return true
    })
}

/**
 * 获取第一个可访问的菜单路径
 * @param {Array} menus - 菜单数据
 * @returns {String} 第一个菜单的路径
 */
export function getFirstMenuPath(menus) {
    if (!menus || menus.length === 0) {
        return '/'
    }

    // 按 sortOrder 排序
    const sortedMenus = [...menus].sort((a, b) => a.sortOrder - b.sortOrder)

    // 如果第一个菜单有子菜单，返回第一个子菜单的路径
    if (sortedMenus[0].children && sortedMenus[0].children.length > 0) {
        return sortedMenus[0].children[0].path
    }

    return sortedMenus[0].path
}